﻿#define  _CRT_SECURE_NO_WARNINGS 1//声明外部符号的
#include<stdio.h>
//extern int g_val;
//extern int Add(int, int);
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int c = Add(a, b);
//	printf("c = %d\n", c);
//	printf("g_val = %d\n", g_val);
//
//	return 0;
//}

//int main()
//{
//	printf("%s\n", __FILE__);
//	printf("%d\n", __LINE__);
//	printf("%s\n", __DATE__);
//	printf("%s\n", __TIME__);
//
//	return 0;
//}

//#define M 100
//#define STR "hehe"
//#define reg register//寄存器
//#define do_forever for(;;)
//int main()
//{
//	register int num;//建议将num中的数存放在寄存器中
//	reg int num;
//	do_forever;//死循环
//	printf("%d\n", M);
//	int a = 5 + M;
//	printf("%s\n", STR);
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	switch (n)
//	{
//	case 1:
//		break;
//	case 2:
//		break;
//	case 3:
//		break;
//	}
//
//	return 0;
//}
//
//#define CASE break;case //在写case语句的时候⾃动把 break写上。 
//int main()
//{
//	int n = 0;
//	switch (n)
//	{
//	case 1:
//	CASE 2:
//	CASE 3:
//	}
//
//	return 0;
//}

//#define SQUARE(x) x*x
//int main()
//{
//	int a = 10;
//	int r = SQUARE(a + 1);//a+1*a+1,由于没有括号，导致结果为21
//
//	printf("%d\n", r);
//
//	return 0;
//}
//#define SQUARE(x) (x)*(x)
//int main()
//{
//	int a = 10;
//	int r = SQUARE(a + 1);//a+1*a+1,由于有括号，结果为121
//
//	printf("%d\n", r);
//
//	return 0;
//}

//#define DOUBLE(x) (x)+(x)
//int main()
//{
//	int a = 10;
//	int r = 5*DOUBLE(a);
//
//	printf("%d\n", r);//60,5*10+10
//
//	return 0;
//}
//#define DOUBLE(x) ((x)+(x))
//int main()
//{
//	int a = 10;
//	int r = 5 * DOUBLE(a);
//
//	printf("%d\n", r);//100
//
//	return 0;
//}

//int main()
//{
//	int a = 10;
//	//int b = a + 1;
//	//b=11, a=10
//	int b = ++a;
//	//b=11, a=11
//	//对a有副作用
//	return 0;
//}

//写一个宏，求两数的较大值
//#define MAX(x,y) ((x)>(y)?(x):(y))
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int m = MAX(a, b);
//	printf("%d\n", m);
//
//	//带有副作用
//	int c = MAX(a++, b++);
////int c = ((a++) > (b++) ? (a++) : (b++));
//	printf("c = %d\n", c);//21:是b++
//	printf("a = %d\n", a);//11
//    printf("b = %d\n", b);//22
//	
//	return 0;
//}

//#define MAX(x, y) ((x)>(y)?(x):(y))
//#define M 100
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int m = MAX(a, M);
//	printf("M = %d\n", M);
//	printf("m = %d\n", m);
//	printf("a = %d\n", a);
//	printf("b = %d\n", b);
//
//	return 0;
//}

//宏的实现方式
//#define MAX(x, y) ((x)>(y)?(x):(y))//存在值被替换
//
////函数的实现方式
//int Max(int x, int y)//函数只存在传参，不会替换
//{
//	return x > y ? x : y;
//}
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	int m1 = MAX(a++, b++);
//	printf("m1 = %d\n", m1);//21
//	int m2 = Max(a++, b++);
//	printf("m2 = %d\n", m2);//22
//
//	return 0;
//}

//#define MALLOC(n, type)  (type*)malloc(n * sizeof(type))
//int main()
//{
//	//int* p = (int*)malloc(10, sizeof(int));
//	int* p = MALLOC(10, int);//宏的参数可以出现类型
//	//int* p = (int*)malloc(10 * sizeof(int));
//	return 0;
//}

//#define PRINT(n,format) printf("the value of "#n" is "format"\n",n)
//int main()
//{
//	/*printf("hello world\n");
//	printf("hello ""world\n");*/
//
//	int a = 10;
//	//printf("the value of a is %d\n", a);
//	PRINT(a, "%d");
//	float b = 3.14f;
//	//printf("the value of b is %f\n", b);
//	PRINT(b, "%f");
//	return 0;
//}

//int int_max(int x, int y)
//{
//	return x > y ? x : y;
//}
//float float_max(float x, float y)
//{
//	return x > y ? x : y;
//}

//宏定义
//#define GENERIC_MAX(type)\
//type type##_max(type x,type y)\
//{              \
//return x>y?x:y;\
//}
//
//GENERIC_MAX(int)
//GENERIC_MAX(float)
//GENERIC_MAX(char)
//int main()
//{
//	int m = int_max(7, 9);
//	printf("%d\n", m);
//	return 0;
//}

//#define M 100
//int main()
//{
//	printf("%d\n", M);
//#undef M
//#define M 1000
//	printf("%d\n", M);
//}

//int main()
//{
//	int array[sz];//这里的sz未定义，但在行命令处可以定义
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		array[i] = i;
//	}
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", array[i]);
//	}
//	printf("\n");
//	return 0;
//}

//#define __DEBUG__
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//#ifdef __DEBUG__
//		printf("%d\n", arr[i]);//为了观察数组是否赋值成功。  
//#endif //__DEBUG__
//	}
//	return 0;
//}

//1.
//#if 常量表达式
////...
//#endif
////常量表达式由预处理器求值。 
//如：
//#define __DEBUG__ 1
//#if __DEBUG__
////..
//#endif
////2.多个分⽀的条件编译
//#if 常量表达式
////...
//#elif 常量表达式
////...
//#else
////...
//#endif
////3.判断是否被定义
//#if defined(symbol)
//#ifdef symbol
//
//#if !defined(symbol)
//#ifndef symbol
////4.嵌套指令
//#if defined(OS_UNIX)
//        #ifdef OPTION1
//               unix_version_option1();
//        #endif
//        #ifdef OPTION2
//                unix_version_option2();
//        #endif
//#elif defined(OS_MSDOS)
//        #ifdef OPTION2
//                msdos_version_option2();
//        #endif
//#endif

//int main()
//{
//#if 0//为假
//	printf("hehe\n");
//#endif
//	return 0;
//}
//
////err,只能定义#define a 100为其赋值
//int main()
//{
//	int a = 100;
//#if a>10
//	printf("hehe\n");
//#endif
//	return 0;
//}

//#define M 100
//int main()
//{
//#if M == 0
//	printf("hrhr\n");
//#elif M == 10
//	printf("jkjk\n");
//#elif M == 20
//	printf("jdfk\n");
//#else
//	printf("hehe\n");
//#endif
//	return 0;
//}

//#define M 100
//int main()
//{
//#if defined(M)
////等价于#ifdef M
//	printf("hehe\n");
//#endif
//	return 0;
//}
////如果没有定义,以下为真
//int main()
//{
//#if !defined(M)
////等价于ifndef M
//	printf("hehe\n");
//#endif
//	return 0;
//}

//EOF

#include "test.h"
#include "test.h"
#include "test.h"
#include "test.h"
#include "test.h"

int main()
{

    return 0;
}